package com.liuxinlong.modules.common.service;

import com.liuxinlong.modules.entity.WorkFlowConfig;
import com.liuxinlong.modules.entity.WorkFlowNodeConfig;

import java.util.List;
import java.util.Map;

/**
 * 工作流信息接口
 *
 * @author liuxinlong@hotwater.com.cn
 * @version 1.0.0
 * @since 2024-04-23
 */
public interface WorkFlowService {
    /**
     * 查询工作流配置信息列表
     *
     * @param queryParam 查询条件
     * @return 工作流配置信息列表
     */
    List<Map<String, Object>> queryWorkflowConfigList(Map<String, Object> queryParam);

    /**
     * 查询工作流配置数
     *
     * @param queryParam 查询条件
     * @return 工作流配置数
     */
    int getWorkflowConfigCount(Map<String, Object> queryParam);

    /**
     * 新增工作流配置
     *
     * @param workFlowConfig 工作流配置
     */
    void addWorkflowConfig(WorkFlowConfig workFlowConfig);

    /**
     * 修改工作流配置
     *
     * @param workFlowConfig 工作流配置
     */
    void updateWorkflowConfig(WorkFlowConfig workFlowConfig);

    /**
     * 删除工作流配置
     *
     * @param id 工作流配置id
     */
    void deleteWorkflowConfig(String id);

    /**
     * 查询工作流节点配置
     *
     * @param configId 工作流id
     * @return 工作流节点配置
     */
    List<Map<String, Object>> pageWorkflowNodeConfig(String configId);

    /**
     * 修改工作流节点配置
     *
     * @param configId 工作流id
     * @param nodeList 节点配置
     */
    void updateWorkflowNodeConfig(String configId, List<WorkFlowNodeConfig> nodeList);

    /**
     * 查询工作流信息列表
     *
     * @param queryParam 查询条件
     * @return 工作流信息列表
     */
    List<Map<String, Object>> queryWorkflowList(Map<String, Object> queryParam);

    /**
     * 查询工作流数
     *
     * @param queryParam 查询条件
     * @return 工作流数
     */
    int getWorkflowCount(Map<String, Object> queryParam);

    /**
     * 修改工作流配置状态
     *
     * @param configId 工作流配置id
     */
    void updateWorkflowConfigStatus(String configId);

    /**
     * 工作流发起
     *
     * @param businessId 业务id
     * @param configType 配置业务类型
     */
    void startWorkflow(String businessId, int configType, String expand);

    /**
     * 流程处理
     *
     * @param id           流程id
     * @param result       审核结果
     * @param dealOpinions 处理意见
     */
    void dealWorkflow(String id, int result, String dealOpinions);

    /**
     * 查询工作流详情数据
     *
     * @param id      工作流id
     * @param childId 子业务id
     * @return 工作流详情数据
     */
    Map<String, Object> queryWorkflowDetail(String id, String childId);

    /**
     * 流程催办
     *
     * @param id         流程id
     * @param targetUser 目标用户
     */
    void urgingWorkflow(String id, String targetUser);

    /**
     * 流程撤回
     *
     * @param id 流程id
     */
    void recallWorkflow(String id);

    /**
     * 查询工作流详情数据
     *
     * @param id 工作流id
     * @return 工作流详情数据
     */
    Map<String, Object> queryWorkflowRecordDetail(String id);

    /**
     * 修改流程流转记录
     *
     * @param flowId       流程id
     * @param dealType     处理类型
     * @param dealOpinions 处理意见
     */
    void updateWorkflowRecord(String flowId, int dealType, String dealOpinions);

    /**
     * 查询业务流程记录
     *
     * @param businessId   业务id
     * @param businessType 业务类型
     * @return 业务流程记录
     */
    List<Map<String, Object>> queryBusinessWorkflowRecord(String businessId, int businessType);

    /**
     * 生成数据
     */
    void generateWorkflowRecord();
}
